package com.demo.Main.FtpUtil;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;

import java.io.*;

/**
 * @author zxc
 *
 *
 */

public class ZxcEnd {

    /*
    运行的入口
     */
    public static void main(String[] args) {
        // 检测服务器
        // check();
        // 向服务器发送文件
        fileupdata();
    }

    // 获取文件修改时间，判断文件是否需要发送
    public static void fileupdata()
    {

        long flg = 0L;
        do {
            String str = null;
            // 这里应该读取info.json中将要发送的文件
            File file = new File("localfile/server.txt");
            if (!file.exists())
            {
                System.err.println("文件不存在");
                System.exit(1);
            }
            long old = file.lastModified();
            System.out.println(old);
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            long timenew = file.lastModified();

            flg = timenew-old;
            if (flg==0) {
                System.out.println("文件无改变");
            } else {
                System.out.println("文件改变了，发送文件");
                sendfile();
            }
        }while (true);




        /*try (FileInputStream fis = new FileInputStream("loaclfile/info.json");){
            str = new String(fis.readAllBytes());
        } catch (Exception e) {
            System.out.println("文件读取失败");
        }*/
    }



    public static void sendfile()
    {

        String str = null;
        try (FileInputStream fis = new FileInputStream("loaclfile/info.json");){
            str = new String(fis.readAllBytes());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        // 读取文件中的json列表
        JSONArray jsonArray = new JSONArray(str);
        //获取文件内的服务器个数
        int size = jsonArray.size();
        //对每个服务器发送文件
        for (int i = 0; i < size; i++) {
            JSONObject json = jsonArray.getJSONObject(i);
            //获得当前这个信息中的ip地址
            String s = json.getStr("ip");
            //获得当前这个信息中的端口
            int port = json.getInt("port");
            //获得用户名
            String user = json.getStr("username");
            //获得密码
            String password = json.getStr("password");
            // 获取要传输的文件
            String file = json.getStr("file");
            // 设置文件名称
            String filename = file.split("/")[1];
            try (FileInputStream fis = new FileInputStream(file)){
                //发送文件并判断是否发送成功
                boolean upload = FTPTools.upload(s, port, user, password, "", new FileInputStream(file), filename);
                System.out.println(upload?s+"服务器"+"文件上传成功":s+"服务器"+"文件上传失败");
            } catch (FileNotFoundException e) {
                System.out.println("文件未读取到");
            } catch (IOException e) {
                System.out.println("上传失败");;
            }
        }
    }


    /*
    检查服务器是否正常
     */
    public static void check()
    {
        /*
        自动检测项目目录下localfile中的info.json文件，
        读取出json数组中每个服务器的ip进行访问，
        判断服务器是否正常运行
         */
        String s = null;
        //
        try (FileReader fis = new FileReader("localfile/server.txt");
             BufferedReader br = new BufferedReader(fis)) {
            while (br.ready()) {
                HttpResponse execute = null;
                try {
                    s = br.readLine();
                    HttpRequest httpRequest = HttpRequest.get(s).timeout(2000);
                    execute = null;
                    execute = httpRequest.execute();
                } catch (Exception e) {
                    System.err.println(s + "无法访问网络");
                    continue;
                }

                int status = execute.getStatus();
                if (status == 200) {
                    System.out.println(s + " 网站访问成功");
                } else {
                    System.err.println(s + " 网站访问失败");
                }
            }
        } catch (IOException e) {
            System.out.println(s + "网站访问失败");
        }
    }

}
